package com.algorithm.ch1.cjm.string;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 字符串中的第一个唯一字符
 * 给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 * <p>
 * 案例:
 * <p>
 * s = "leetcode"
 * 返回 0.
 * <p>
 * s = "loveleetcode",
 * 返回 2.
 * <p>
 * <p>
 * 注意事项：您可以假定该字符串只包含小写字母。
 */
public class FirstUniqChar {

    public static void main(String[] args) {
        System.out.println(firstUniqChar1("loveleetcode"));

    }

    /**
     * 利用map的key value 键值对
     * @param str
     * @return
     */
    public static int firstUniqChar(String str) {

        if(str == null || str.length() == 0){
            return -1;
        }

        char[] chars = str.toCharArray();

        //获取值出现次数和键值对
        Map<Character, Integer> map = new HashMap<>();

        for (int i = 0; i < chars.length; i++) {

            Integer res = map.get(chars[i]);

            if(res != null){

                map.put(chars[i], ++ res);
            }else {
                map.put(chars[i], 1);
            }
        }

        for (int i = 0; i < chars.length; i++) {

            Integer value = map.get(chars[i]);

            if(value != null && value.intValue() == 1){
                return i;
            }
        }

        return -1;
    }

    public static int firstUniqChar1(String s){

        int result = -1;
        for(char c = 'a';c<='z';c++){
            int index = s.indexOf(c);
            if(index != -1 && index == s.lastIndexOf(c)){
                result = result != -1?Math.min(result,index):index;
            }
        }
        return result;

    }
}
